home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 June / Macworld (1999-06).dmg / Shareware World / Info / For Developers / MacZoop2.0.sea / MacZoop2.0 / Required Classes / ZComrade.h < prev    next >
Text File  |  1999-02-11  |  3KB  |  94 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop - "the framework for the rest of us"     
  5. *
  6. *
  7. *
  8. *            ZComrade.h        -- an object that can maintain loose links between objects
  9. *
  10. *
  11. *
  12. *
  13. *
  14. *            © 1996, Graham Cox
  15. *
  16. *
  17. *
  18. *
  19. *************************************************************************************************/
  20.  
  21. #pragma once
  22.  
  23. #ifndef __ZCOMRADE__
  24. #define __ZCOMRADE__
  25.  
  26. #include    "ZObject.h"
  27.  
  28. class    ZComrade;
  29. class    ZMessage;
  30. class    ZComradeList;
  31.  
  32. // set up streaming stuff:
  33.  
  34. DEFINECLASSID( ZComrade, 'zcom' );
  35.  
  36. // class def:
  37.  
  38. class ZComrade    : public ZObject
  39. {
  40.     private:
  41.         ZComradeList*        talkers;
  42.         ZComradeList*        listeners;
  43.         
  44.     public:
  45.         ZComrade();
  46.         virtual ~ZComrade();
  47.         
  48.         virtual void    SendMessage( long aMessage, void* msgData );
  49.         virtual void    SendMessage( ZMessage* aMessage );
  50.         virtual void    ReceiveMessage( ZComrade* aSender, long theMessage, void* msgData ) {};
  51.         virtual void    ReceiveMessage( ZComrade* aSender, ZMessage* aMessage ) {};
  52.         virtual void    ListenTo( ZComrade* aSender );
  53.         virtual void    StopListeningTo( ZComrade* aSender );
  54.         
  55.     // streaming:
  56.     
  57.         virtual void    WriteToStream( ZStream* aStream );
  58.         virtual void    ReadFromStream( ZStream* aStream );
  59.         
  60.     protected:
  61.     
  62.         virtual void    AddTalker( ZComrade* aTalker );
  63.         virtual void    AddListener( ZComrade* aListener );
  64.         virtual void    RemoveTalker( ZComrade* aTalker );
  65.         virtual void    RemoveListener( ZComrade* aListener );
  66. };
  67.  
  68.  
  69.  
  70.  
  71. /*
  72.  
  73. What are comrades for? If you are familiar with TCL or another framework, this is like a
  74. collaborator. It allows objects to communicate through a standard interface (the comrade
  75. interface) without the objects needing to know explicitly what the various talkers and
  76. listeners actually are- in other words, it is a loose binding between objects.
  77.  
  78. Comrades are very useful- for example if you want two windows to represent some common data,
  79. you can make both windows become listeners of the data object. The data transmits a message
  80. when it changes, and both windows can update their views accordingly. Thus problems with
  81. keeping duplicates of the data disappear.
  82.  
  83. In MacZoop, many objects are subclassed from ZComrade- all Commanders, windows, arrays, etc
  84. are comrades. Use the "Show Hierarchy Window" command in CodeWarrior to see how everything
  85. fits together. Neat, huh?
  86.  
  87. Note:- ZMessage is currently not actually declared anywhere, thus leaving it up to the
  88. user/programmer of MacZoop to implement whatever is needed. This may change in the future.
  89.  
  90. */
  91.  
  92.  
  93.  
  94. #endif